{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Latent factor model\n",
    "\n",
    "## 背景\n",
    "\n",
    "在 item cf 算法中，item的贡献次数越多，两个 item 就越相似。LFM为了解决这个问题。\n",
    "\n",
    "比如，看电视的时候，想看某个电视剧，为了不错过电视剧可能会提前换台，在节目开始前进行观看，而节目开始前会有天气预报，这样就导致天气预报和电视剧变成了相似。但是这个时候我们如果知道他们同属不同的 tag 那么我们也不会把他们放在一起，会给予一定的降权，但是建立 tag 体系需要大量的人力标注。\n",
    "\n",
    "LFM根据用户对 item 点击与否获得用户与 item 的关系，item 之间的关系等等。\n",
    "\n",
    "## 什么是LFM算法\n",
    "\n",
    "- 矩阵分解算法的一种；\n",
    "\n",
    "输入：user对item的点击矩阵；\n",
    "\n",
    "参数：每一个user的向量表示和每一个item的向量表示；\n",
    "\n",
    "方式：用user矩阵和item矩阵的矩阵乘 拟合 user对item的点击矩阵；\n",
    "\n",
    "### 实例\n",
    "\n",
    "输入：user对item的点击矩阵（1代表点击、0代表未点击）\n",
    "\n",
    "| \\ | item1 | item2 | item3 |\n",
    "| - | - | - | - |\n",
    "| user1 | 1 | 0 | 1 |\n",
    "| user2 | 0 | 1 | 0 |\n",
    "| user3 | 1 | 1 | 0 |\n",
    "\n",
    "输出： user1:[0.123, 0.325, ..., 0.623], ... item1:[0.214, 0.034, ..., 0.241], ...\n",
    "\n",
    "user和item的向量维度是自定义的，用user与item作内积即可判断user对item的偏好\n",
    "\n",
    "## 应用场景\n",
    "\n",
    "1. 完成 user 的 item 推荐列表；\n",
    "\n",
    "2. 完成 item 的相似度列表；\n",
    "\n",
    "3. 完成 item 之间隐藏 Topic 的挖掘；\n",
    "\n",
    "## LFM应用场景\n",
    "\n",
    "- 计算用户的toplike；\n",
    "\n",
    "- 计算item的topsim；\n",
    "\n",
    "- 计算item的topic。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
